package br.com.velp.sudecap.daoimpl;

import br.com.velp.sudecap.dao.CidadeDAO;
import br.com.velp.sudecap.entidade.Cidade;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Repository;

/**
 * <sumario>
 * <objetivo> "Rastreabilidade" </objetivo>
 * <autor> EDUARDO SANTOS DE OLIVEIRA </autor>
 * <versao>1.0.0.0</versao>
 * <data_criacao> 17.10.2012 </data_criacao>
 * <data_ultima_alteracao> N/A </data_ultima_alteracao>
 * <requisitos_afetados> RF008.01 - Listar Cartórios / RF008.02  - Cadastrar Cartórios </requisitos_afetados>
 * <descricao> Implementação da Interface Responsável Por Consultas Inerentes a Municípios/Estados </descricao>
 * </sumario>
 */
@Repository("cidadeDAO")
@Scope(ConfigurableBeanFactory.SCOPE_SINGLETON)
public class CidadeDAOImpl implements CidadeDAO{
    
    public static final Long serialVersionUID = 1L;
    
    @Autowired
    private SessionFactory sessionFactory;

    @Override
    public List<String> recuperarTodosEstados() {
	String consulta = "select distinct uf from Cidade order by uf";
	Query query = sessionFactory.getCurrentSession().createQuery(consulta);
	return query.list();
    }

    @Override
    public List<Cidade> recuperarMunicipiosPorEstado(String siglaEstado) {
	Criteria criteria = sessionFactory.getCurrentSession().createCriteria(Cidade.class);
	criteria.add(Restrictions.eq("uf", siglaEstado));
	criteria.addOrder(Order.asc("nome"));
	return criteria.list();
    }
    
}
